#include<bits/stdc++.h>
using namespace std;
const int MAXN=50010;
typedef long long LL;
int n,m,sq,a[MAXN],bac[MAXN];
LL p1,p2;
struct query
{
	int num,l,r;
}q[MAXN];
pair<LL,LL> ans[MAXN];
bool cmp(query a,query b)
{
	if(a.l/sq==b.l/sq)return a.r<b.r;
	return a.l/sq<b.l/sq;
}
LL gcd(LL a,LL b)
{
	return b?gcd(b,a%b):a;
}
int main()
{
	int l=1,r=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)
		scanf("%d",&a[i]);
	for(int i=1;i<=m;++i)
	{
		scanf("%d%d",&q[i].l,&q[i].r);
		sq=max(q[i].r,sq);
		q[i].num=i;
	}
	sq=sqrt(sq);
	sort(q+1,q+1+m,cmp);
	for(int i=1;i<=m;++i)
	{
		while(r<q[i].r)
		{
			++r;
			p1+=bac[a[r]];
			++bac[a[r]];
			p2+=r-l;
		}
		while(l>q[i].l)
		{
			--l;
			p1+=bac[a[l]];
			++bac[a[l]];
			p2+=r-l;
		}
		while(r>q[i].r)
		{
			p2-=r-l;
			--bac[a[r]];
			p1-=bac[a[r]];
			--r;
		}
		while(l<q[i].l)
		{
			p2-=r-l;
			--bac[a[l]];
			p1-=bac[a[l]];
			++l;
		}
		ans[q[i].num]=make_pair(p1,p2);
	}
	for(int i=1;i<=m;++i)
	{
		LL k=gcd(ans[i].first,ans[i].second);
		printf("%lld/%lld\n",ans[i].first/k,ans[i].second/k);
	}
	return 0;
}
